package u1;

/**
 * Basic statistics for some sequence of values.
 */
public class StatCounter {
  private long count;
  private double max;
  private double min;
  private String name;
  private double total;

  public StatCounter() {
    this("");
  }

  public StatCounter(String name) {
    this.count = 0;
    this.total = 0;
    this.min = Double.MAX_VALUE;
    this.max = -Double.MAX_VALUE;
    this.name = name;
  }

  public long getCount() {
    return count;
  }

  public double getMax() {
    return max;
  }

  public double getMean() {
    return this.total / this.count;
  }

  public double getMin() {
    return min;
  }

  public String getName() {
    return name;
  }

  public double getTotal() {
    return total;
  }

  public void record(double value) {
    this.count += 1;
    this.total += value;
    if (value < this.min)
      this.min = value;
    if (value > this.max)
      this.max = value;
  }

  @Override
  public String toString() {
    return String.format("%s: %d values in [%f, %f], mean=%f", this.name,
        this.count, this.min, this.max, this.getMean());
  }
}
/*
* Copyright (c) 2009 John Lees-Miller
* 
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
* 
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/

